<?php

namespace Home\Controller;

class BaseController extends \Think\Controller {

    //保存登录用户信息id和user_token
    protected $user = array();

    /**
     * 控制器初始化方法，子类需重写该方法
     */
    protected function _initialize() {
        //该平台接口无登录概念。
        //$this->user = $this->isLogin();
        $this->verifyData();    //验证签名
    }

    /**
     * 传输数据验证
     */
    public function verifyData() {
        if(IS_POST){
            $arrParam = $_POST;
        }else{
            $arrParam = $_GET;
        }
        $secret_key = "32a0357b12de425b9b957b25f66cf002";
        
        if(empty($arrParam)){
            $sign = $secret_key;
        }else{
            $sign = concat($arrParam) . $secret_key;
        }
        
        if(md5($sign) != $arrParam['token']) {
            $this->ajaxReturn(array('error'=> 1, 'info'=> '数据来源非法'));
        }
    }

    /**
     * 判断用户是否登录
     * @author 刘新
     */
    public function isLogin($isReturn = false) {
        //测试代码
        //$this->ajaxReturn(array('error' => 1, 'info' =>CONTROLLER_NAME));
        //判断是否忽略列表
        $ignore = global_config('ignore_check_login');
        if($ignore) {
            $ignore = split(',',$ignore);
            if(in_array(API_CODE,$ignore))
                return true;
        }

        //-----------------以下内容单独写了verifyData方法-------------------------
        $result = array('error' => 1,'info' => false);
        $param  = I('params');

        //判断是否传入user_token
        $userToken = $param['userToken'];
        if(!preg_match('/^\w{32,64}$/',$userToken)) {
            $result['info'] = '请传入user_token';
        }
        else {
            //查询库
            $ut             = $this->returnOne('UserToken',array('user_token' => $userToken),'expire_time desc','user_id,user_token,expire_time,mobile');
            if(!$ut)
                $result['info'] = '请先注册，如果已有账号请先登录';

            //如果user_token过期，则提示登录
            if($ut['expire_time'] <= time()) {
                $result['error'] = 2;
                $result['info']  = '请先登录';
            }
        }

        //如果已登录则直接返回，否则输出到客户端
        if($result['info'] === false)
            return array('userId' => $ut['user_id'],'userToken' => $ut['user_token'],'mobile' => $ut['mobile']);
        $this->ajaxReturn($result);
    }

    /**
     * 查询信息
     * @param string $model 模型名称
     * @param array $where 查询条件
     * @param string $order 排序规则
     * @param string $field 返回字段信息
     * @author 刘新
     * @return array|boolean 返回查询结果
     */
    protected function returnList($model,$where = array(),$order = '',$field = true,$option = array()) {
        //获取模型
        $model = $this->getModel($model);

        //构造查询条件
        if(!$where)
            $where           = array('status' => 1);
        if(empty($where['status']) && $where['status'] !== 0 && $where['status'] !== '0')
            $where['status'] = 1;

        //查询
        $model->where($where)->order($order)->field($field);

        //分页查询
        if($option['page'] && $option['size'])
            $model->page($option['page'],$option['size']);

        //分组
        if($option['group'])
            $model->group($option['group']);

        //查询多少条记录
        if($option['limit'])
            $model->limit($option['limit']);

        //测试代码
        //$model->fetchSql(true);

        return $model->select();
    }

    /**
     * 查询信息
     * @param string $model 模型名称
     * @param array $where 查询条件
     * @param string $order 排序规则
     * @param string $field 返回字段信息
     * @author 刘新
     * @return array|boolean 返回查询结果
     */
    protected function returnOne($model,$where = array(),$order = '',$field = true) {
        //获取模型
        $model = $this->getModel($model);

        //构造查询条件
        if(!$where)
            $where           = array('status' => 1);
        if(empty($where['status']) && $where['status'] !== 0 && $where['status'] !== '0')
            $where['status'] = 1;

        //查询并返回结果
        return $model->where($where)->order($order)->field($field)->find();
    }

    /**
     * 获取模型对象
     * @param string|object $model
     * @author 刘新
     */
    protected function getModel($model) {
        if(!$model)
            return M();
        if(is_string($model))
            return M($model);
        if(!is_object($model))
            return false;
        return $model;
    }

    /**
     * 错误日志
     * @param string $file 发生错误的文件
     * @param string|int $line 错误日志发生的等号
     * @author 刘新
     */
    public function errorLog($file,$line,$content) {
        record_error_log($file,$line,$content,$this->user['userId'],$this->user['mobile']);
        /* 	if(is_object($content)) {
          $data['content'] = $content->getDbError() . '---' . $content->getError();
          } else {
          $data['content'] = $content;
          }
          $data['file'] = $file;
          $data['line'] = $line;
          $data['controller'] = CONTROLLER_NAME;
          $data['action'] = ACTION_NAME;
          $data['module'] = MODULE_NAME;
          $data['api_code']	= API_CODE;
          $data['user_id'] = $this->user['userId'];
          $data['mobile'] = M('User')->where(array('id'=>$data['user_id']))->getField('mobile');
          return D('ErrorLog')->addErrorLog($data); */
    }

    /**
     * 处理操作后返回的数据
     * @param array $data
     * @param string $info
     * @return array
     * @author 刘新
     */
    public function successResult($data,$info = '') {
        $return = array('error' => 0,'info' => '');
        //有数据
        if($data) {
            if($info) {
                $return['info'] = $info;
            }
            else {
                $return['info'] = $data;
            }
            //无数据
        }
        else {
            $return['info'] = array();
        }

        return $return;
    }

    /**
     * 处理操作后返回的数据
     * @param array $data
     * @param string $info 查询成功且有数据时的提示信息
     * @return array
     * @author 刘新
     */
    public function result($data,$info = '') {
        if($data === false)
            return array('error' => 1,'info' => '查询失败');
        return $this->successResult($data,$info);
    }

}
